package common

//func FindAllData(address string) (all []models.SelectBoss, err error) {
//	if address != "" {
//		logs.Info("需要筛选：" + address)
//		all, err = client.FindAreaData(address)
//		if err != nil {
//			return nil, err
//		}
//		if len(all) != 0 {
//			return all, err
//		} else {
//			return nil, errors.New("未查询到该地区数据")
//		}
//	} else {
//		logs.Info("查全部：" + address)
//		all, err = client.FindAll()
//		if err != nil {
//			return nil, err
//		}
//		if len(all) == 0 {
//
//		}
//		return all, err
//	}
//}
//
//func InsertCity(cityName, cityCode string) (err error) {
//	err = client.Insert(cityName, cityCode)
//	if err != nil {
//		return err
//	}
//	return nil
//}
//
//func FindOne(cd models.PmCityDB) (err error, data interface{}, flag bool) {
//	// 如果有数据，直接返回
//	RdWorkData, Rderr := client.RedisGet(cd.WorkCity)
//	if Rderr != nil {
//		logs.Info("查询redis失败,查询mysql...")
//		res, err1 := client.FindAreaData(cd.WorkCity)
//		if err1 != nil {
//			return err1, nil, false
//		}
//		if len(res) != 0 {
//			flag = true
//			return nil, res, flag
//		}
//	} else {
//		var boosData []models.Boss
//		logs.Info("查询redis正常,结果返回...")
//		err = json.Unmarshal([]byte(RdWorkData), &boosData)
//		if err != nil {
//			return err, nil, false
//		}
//		return nil, boosData, flag
//	}
//
//	// 使用协程并发执行任务
//	code, OneErr := client.FindOneAreaCode(cd.WorkCity)
//	if OneErr != nil {
//		return OneErr, nil, false
//	}
//
//	if client.RedisExist("Bd_" + cd.WorkCity) {
//		return errors.New("此任务正在执行中,请勿频繁发起"), nil, false
//	}
//
//	ch := make(chan models.Area, 5) // 创建带缓冲区的通道
//	ch <- code                      // 向通道写入数据
//
//	// 开启三个协程
//	for i := 1; i <= 3; i++ {
//		global2.Wg.Add(1)
//		go func(id int, ch chan models.Area, cd models.PmCityDB) {
//			defer global2.Wg.Done()
//			FuncBFileDB(ch, id, cd)
//		}(i, ch, cd)
//	}
//
//	// 等待所有 Goroutine 完成任务
//	global2.Wg.Wait()
//
//	// 任务执行完毕后关闭管道
//	close(ch)
//	fmt.Println("协程任务为空")
//
//	//var codeStrut modelss.Area
//	//if v, ok := global.AreaMap[cd.WorkCity]; ok {
//	//	codeStrut = modelss.Area{
//	//		CityName: cd.WorkCity,
//	//		CityCode: v,
//	//	}
//	//} else {
//	//	err = errors.New("不存在该地区数据")
//	//	return
//	//}
//	//
//	//ch := make(chan modelss.Area, 5) // 创建带缓冲区的通道
//	//ch <- codeStrut                 // 向通道写入数据
//	//
//	//for i := 1; i <= 3; i++ {
//	//	// 开启三个协程
//	//	global.Wg.Add(1)
//	//	go func(id int, ch chan modelss.Area, cd modelss.PmCityDB) { defer global.Wg.Done(); FuncBFile(ch, id, cd) }(i, ch, cd)
//	//}
//	// 等待所有 Goroutine 完成任务
//	//global.Wg.Wait()
//	//fmt.Println("协程任务为空")
//
//	return
//}
//
//func Del(brandName string) bool {
//	if !client.Del(brandName) {
//		return false
//	}
//	return true
//}
//
//func QueryTasks(name, key string) (models.Task, error) {
//	var tk models.TaskKey
//	taskKey := "taskkey_" + key
//	gettaskKey, err := client.RedisGet(taskKey)
//	json.Unmarshal([]byte(gettaskKey), &tk)
//	if err != nil || tk.TaskKey == "" {
//		queryTk, err := client.QueryTk(key)
//		if err != nil {
//			return models.Task{}, err
//		}
//		query, err := client.Query(queryTk.TaskKey)
//		if err != nil {
//			return models.Task{}, err
//		}
//		return query, nil
//	}
//	var t models.Task
//	gettask, err := client.RedisGet(key)
//	json.Unmarshal([]byte(gettask), &t)
//	return t, nil
//}
//
//func EndTasks(name, key string) (models.Task, error) {
//	global2.EndChan = make(chan struct{}, 1)
//	time.Sleep(3 * time.Second) // 让协程运行一段时间
//	close(global2.EndChan)      // 通过通道发送停止信号
//
//	time.Sleep(1 * time.Second) // 等待协程退出
//
//	//改变任务状态
//	logs.Info("任务强制结束，更改任务状态...")
//	err := client.UpdateTk(key, "任务强结束", nil)
//	if err != nil {
//		fmt.Println(err)
//	}
//	logs.Info("主函数结束")
//	query, err := client.Query(key)
//	if err != nil {
//		return models.Task{}, err
//	}
//	return query, nil
//}
//
//func FuncBFileDB(ch chan models.Area, funcId int, cd models.PmCityDB) {
//	// 从通道中读取数据
//	one, ok := <-ch
//	if !ok {
//		logs.Info(fmt.Sprintf("Worker %v received signal to stop.", funcId))
//		return
//	}
//
//	logs.Info(fmt.Sprintf("Worker %v received value: %v", funcId, one))
//	logs.Info("城市名称： " + one.CityName)
//
//	// 生成任务 ID 和 Key
//	taskid := RandomString(15)
//	key := taskid + fmt.Sprintf("%v", time.Now().Unix())
//	taskname := "Bd" + "_" + one.CityName
//
//	// 检查任务是否已存在
//	if client.RedisExist(taskname) {
//		logs.Info("此任务正在执行中,请勿频繁发起")
//		return
//	}
//
//	// 将任务信息存入 Redis
//	err := client.RedisSet(taskname, one.CityCode)
//	if err != nil {
//		logs.Error("RedisSet failed: " + err.Error())
//		return
//	}
//
//	logs.Info("添加任务中...")
//	logs.Info("任务KEY：" + key)
//	logs.Info("redis task:" + key)
//
//	// 创建任务对象
//	tak := models.Task{
//		TaskId:     taskid,
//		TaskName:   taskname,
//		TaskStatus: "任务执行中",
//		TaskKey:    key,
//		TaskData:   nil,
//		NotifyUrl:  global2.NotifyUrl,
//	}
//
//	// 将任务信息存入 Redis
//	err = client.RedisSet(key, tak)
//	if err != nil {
//		logs.Error("RedisSet failed: " + err.Error())
//		return
//	}
//
//	errTK := client.Transaction(taskname, key)
//	if errTK != nil {
//		logs.Error("Transaction failed: " + errTK.Error())
//		return
//	}
//
//	logs.Info("添加任务完毕，执行任务中...")
//
//	// 创建一个用于传递错误的通道
//	errChan := make(chan models.ErrMsg, 1)
//	defer close(errChan)
//
//	// 执行任务
//	BossFileDB(one.CityCode, taskname, errChan, funcId, one.CityName, cd.WorkType)
//
//	logs.Info("执行任务结束，更改任务状态...")
//
//	// 处理任务结果
//	var data interface{}
//	var res []models.SelectBoss
//	ChanRes, ok := <-errChan
//	if ok {
//		if ChanRes.Err != nil && (ChanRes.Msg == "success" || ChanRes.Msg == "FailErr") {
//			logs.Info(fmt.Sprintf("Error from worker %d: %v", funcId, ChanRes.Err))
//			data = "该地区不支持数据查询或者浏览器启动错误"
//		} else {
//			var err1 error
//			res, err1 = client.FindAreaData(one.CityName)
//			if err1 != nil {
//				logs.Error("FindAreaData failed: " + err1.Error())
//				return
//			}
//			data = res[0]
//		}
//	}
//
//	// 将任务结果存入数据库
//	marshal, _ := json.Marshal(data)
//	errtk := client.TransInsert(&models.Task{
//		TaskId:     taskid,
//		TaskName:   taskname,
//		TaskStatus: "任务执行完成",
//		TaskKey:    key,
//		TaskData:   marshal,
//		NotifyUrl:  global2.NotifyUrl,
//	})
//	if errtk != nil {
//		logs.Error("Transaction failed: " + errtk.Error())
//		return
//	}
//
//	// 清理 Redis 缓存
//	if !client.RedisDel(taskname) {
//		logs.Info("任务缓存key删除失败")
//	}
//	if !client.RedisDel(key) {
//		logs.Info("任务缓存key删除失败")
//	}
//	if !client.RedisDel("taskkey_" + key) {
//		logs.Info("任务缓存key删除失败")
//	}
//
//	logs.Info("任务缓存key删除成功")
//	logs.Info("任务执行完成")
//}
//
//func FuncBFile(ch chan models.Area, funcId int, cd models.PmCityDB) {
//	// 从通道中读取数据
//	task, ok := <-ch
//	if !ok {
//		logs.Info(fmt.Sprintf("Worker %v received signal to stop.", funcId))
//		return
//	}
//	jsdata, _ := json.Marshal(task)
//	logs.Info(fmt.Sprintf("Worker %v received value: %v", funcId, string(jsdata)))
//	logs.Info(fmt.Sprintf("添加任务完毕，%v执行任务中...", funcId))
//
//	// 创建一个用于传递错误的通道
//	errChan := make(chan models.ErrMsg, 1)
//	defer close(errChan)
//
//	// 执行任务
//	BossFile(task.CityCode, cd.WorkType, errChan)
//
//	// 处理任务结果
//	ChanRes, ok := <-errChan
//	if ok {
//		if ChanRes.Err != nil && (ChanRes.Msg == "success" || ChanRes.Msg == "FailErr") {
//			logs.Info(fmt.Sprintf("Error from worker %d: %v", funcId, ChanRes.Err))
//		}
//	}
//
//	logs.Info(fmt.Sprintf("%v任务执行完成", funcId))
//}
